#!/usr/bin/env python
# -*- coding:utf-8 -*-

import mysql.connector


class MySqlUtils:
    """
    说明：python3.7实现的对mysql的增删改查，以及高性能的大批量插入操作
    """

    def __init__(self, host, user, password, database):
        self.config = {
            'host': host,
            'user': user,
            'password': password,
            'port': 3306,
            'database': database,
            'charset': 'utf8'
        }

        # 一个星（ * ）：表示接收的参数作为元组来处理
        # 两个星（ ** ）：表示接收的参数作为字典来处理
        self.conn = mysql.connector.connect(**self.config)
        self.cursor = self.conn.cursor()

    # 执行sql查询，返回Array
    def execute_query(self, str_sql):
        self.cursor.execute(str_sql)
        values = self.cursor.fetchall()
        return values

    # 执行sql插入，返回成功与否
    def execute_update(self, str_sql):
        # 执行sql语句
        self.cursor.execute(str_sql)
        self.cursor.rowcount
        # 提交事务
        self.conn.commit()

    # 执行批量插入操作，比executeUpdate执行更快
    def batch_add(self, str_sql_prefix, list_or_tuple_suffix):
        """
        用法：
        cursor.executemany(sql,values)
        其中sql为类似：
        sql="insert into tablename (id,name) values (%s,%s)"
        其中valuse必须为list[tuple(),tuple(),tuple()]或者tuple(tuple(),tuple(),tuple())：
        values=[(1,"zhangsan")],(2,"lisi")]
        #或者
        values=((1,"zhangsan")],(2,"lisi"))

        :param str_sql:
        :return:
        """
        # 执行sql语句
        self.cursor.executemany(str_sql_prefix, list_or_tuple_suffix)
        self.cursor.rowcount
        # 提交事务
        self.conn.commit()

    def close(self):
        self.cursor.close()
        self.conn.close()


if __name__ == '__main__':
    sql_utils = MySqlUtils('172.18.21.146', 'wolf', 'Utech2018', 'test_pf')
    message = sql_utils.execute_query('select * from banner_travel_deals_content')
    for value in message:
        print(value)
    print(len(message))
    # 测试建表
    # sql_utils.execute_update("create table if not exists user (id varchar(20) primary key, name varchar(20))")
    # 测试插库
    # sql_utils.execute_update("insert into user (id, name) values ('13', 'nihao1')")
    # 测试批量插库
    # sql_utils.batch_add("insert into user (id,name) values (%s,%s)", (('111', '222'), ('222', '333'), ('333', '444')))
    sql_utils.close()
